home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic 4 Database How-To / Visual Basic 4 Database - How-to (The Waite Group)(1995).iso / permit32.fr_ / permit32.fr
Text File  |  1995-09-04  |  17KB  |  515 lines

  1. VERSION 4.00
  2. Begin VB.Form Form1 
  3.    BackColor       =   &H00C0C0C0&
  4.    Caption         =   "Permitter"
  5.    ClientHeight    =   4350
  6.    ClientLeft      =   690
  7.    ClientTop       =   1875
  8.    ClientWidth     =   6750
  9.    BeginProperty Font 
  10.       name            =   "MS Sans Serif"
  11.       charset         =   0
  12.       weight          =   700
  13.       size            =   8.25
  14.       underline       =   0   'False
  15.       italic          =   0   'False
  16.       strikethrough   =   0   'False
  17.    EndProperty
  18.    Height          =   4755
  19.    Left            =   630
  20.    LinkTopic       =   "Form1"
  21.    ScaleHeight     =   4350
  22.    ScaleWidth      =   6750
  23.    Top             =   1530
  24.    Width           =   6870
  25.    Begin VB.CommandButton cmdClose 
  26.       Caption         =   "&Close"
  27.       Height          =   495
  28.       Left            =   3780
  29.       TabIndex        =   12
  30.       Top             =   3540
  31.       Width           =   1755
  32.    End
  33.    Begin VB.CommandButton cmdSave 
  34.       Caption         =   "S&ave Permissions"
  35.       Height          =   555
  36.       Left            =   1260
  37.       TabIndex        =   11
  38.       Top             =   3540
  39.       Width           =   1755
  40.    End
  41.    Begin VB.CheckBox chkPermission 
  42.       BackColor       =   &H00C0C0C0&
  43.       Caption         =   "&Delete Data"
  44.       Enabled         =   0   'False
  45.       Height          =   255
  46.       Index           =   6
  47.       Left            =   3720
  48.       TabIndex        =   10
  49.       Top             =   2940
  50.       Width           =   1875
  51.    End
  52.    Begin VB.CheckBox chkPermission 
  53.       BackColor       =   &H00C0C0C0&
  54.       Caption         =   "&Insert Data"
  55.       Enabled         =   0   'False
  56.       Height          =   255
  57.       Index           =   5
  58.       Left            =   3720
  59.       TabIndex        =   9
  60.       Top             =   2640
  61.       Width           =   1875
  62.    End
  63.    Begin VB.CheckBox chkPermission 
  64.       BackColor       =   &H00C0C0C0&
  65.       Caption         =   "Upda&te Data"
  66.       Enabled         =   0   'False
  67.       Height          =   255
  68.       Index           =   4
  69.       Left            =   3720
  70.       TabIndex        =   8
  71.       Top             =   2340
  72.       Width           =   1875
  73.    End
  74.    Begin VB.CheckBox chkPermission 
  75.       BackColor       =   &H00C0C0C0&
  76.       Caption         =   "R&ead Data"
  77.       Enabled         =   0   'False
  78.       Height          =   255
  79.       Index           =   3
  80.       Left            =   3720
  81.       TabIndex        =   7
  82.       Top             =   2040
  83.       Width           =   1875
  84.    End
  85.    Begin VB.CheckBox chkPermission 
  86.       BackColor       =   &H00C0C0C0&
  87.       Caption         =   "Admini&ster"
  88.       Enabled         =   0   'False
  89.       Height          =   255
  90.       Index           =   2
  91.       Left            =   960
  92.       TabIndex        =   6
  93.       Top             =   2940
  94.       Width           =   1875
  95.    End
  96.    Begin VB.CheckBox chkPermission 
  97.       BackColor       =   &H00C0C0C0&
  98.       Caption         =   "&Modify Design"
  99.       Enabled         =   0   'False
  100.       Height          =   255
  101.       Index           =   1
  102.       Left            =   960
  103.       TabIndex        =   5
  104.       Top             =   2640
  105.       Width           =   1875
  106.    End
  107.    Begin VB.CheckBox chkPermission 
  108.       BackColor       =   &H00C0C0C0&
  109.       Caption         =   "&Read Design"
  110.       Enabled         =   0   'False
  111.       Height          =   255
  112.       Index           =   0
  113.       Left            =   960
  114.       TabIndex        =   4
  115.       Top             =   2340
  116.       Width           =   1875
  117.    End
  118.    Begin VB.ListBox lstTables 
  119.       Height          =   1230
  120.       Left            =   3660
  121.       TabIndex        =   1
  122.       Top             =   360
  123.       Width           =   2535
  124.    End
  125.    Begin VB.ListBox lstUsers 
  126.       Height          =   1230
  127.       Left            =   360
  128.       Sorted          =   -1  'True
  129.       TabIndex        =   0
  130.       Top             =   360
  131.       Width           =   2535
  132.    End
  133.    Begin VB.Label lblPermissions 
  134.       BackColor       =   &H00C0C0C0&
  135.       Height          =   255
  136.       Left            =   1620
  137.       TabIndex        =   14
  138.       Top             =   1920
  139.       Width           =   1215
  140.    End
  141.    Begin VB.Label Label3 
  142.       AutoSize        =   -1  'True
  143.       BackColor       =   &H00C0C0C0&
  144.       Caption         =   "Permissions:"
  145.       Height          =   195
  146.       Left            =   360
  147.       TabIndex        =   13
  148.       Top             =   1920
  149.       Width           =   1065
  150.    End
  151.    Begin VB.Label Label2 
  152.       AutoSize        =   -1  'True
  153.       BackColor       =   &H00C0C0C0&
  154.       Caption         =   "Tables and queries:"
  155.       Height          =   195
  156.       Left            =   3660
  157.       TabIndex        =   3
  158.       Top             =   120
  159.       Width           =   1695
  160.    End
  161.    Begin VB.Label Label1 
  162.       AutoSize        =   -1  'True
  163.       BackColor       =   &H00C0C0C0&
  164.       Caption         =   "Users:"
  165.       Height          =   195
  166.       Left            =   360
  167.       TabIndex        =   2
  168.       Top             =   120
  169.       Width           =   555
  170.    End
  171. End
  172. Attribute VB_Name = "Form1"
  173. Attribute VB_Creatable = False
  174. Attribute VB_Exposed = False
  175. Option Explicit
  176.  
  177. Const P_READDESIGN = 0
  178. Const P_MODIFYDESIGN = 1
  179. Const P_ADMINISTER = 2
  180. Const P_READDATA = 3
  181. Const P_UPDATEDATA = 4
  182. Const P_INSERTDATA = 5
  183. Const P_DELETEDATA = 6
  184.  
  185. Const DBSEC_READDESIGN = 4
  186. Const DBSEC_MODIFYDESIGN = 65756
  187. Const DBSEC_ADMINISTER = 852478
  188. Const DBSEC_READDATA = 20
  189. Const DBSEC_UPDATEDATA = 84
  190. Const DBSEC_INSERTDATA = 52
  191. Const DBSEC_DELETEDATA = 148
  192. Const DBSEC_MODIFYDESIGN_INSERTDATA = 65788
  193. Const DBSEC_UPDATEINSERTDATA = 116
  194. Const DBSEC_UPDATEDELETEDATA = 212
  195. Const DBSEC_INSERTDELETEDATA = 180
  196. Const DBSEC_UPDATEINSERTDELETEDATA = 244
  197. Const DBSEC_NOPERMISSIONS = 0
  198. Const DBSEC_READSEC = 131072
  199.  
  200. Const CHK_CHECKED = 1
  201. Const CHK_UNCHECKED = 0
  202.  
  203. Private db As Database
  204. #If Win32 Then
  205.     Private Declare Function GetWindowsDirectory Lib "Kernel32" _
  206.         Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, _
  207.         ByVal nSize As Long) As Long
  208. #Else
  209.     Private Declare Function GetWindowsDirectory Lib "Kernel" _
  210.         (ByVal lpBuffer As String, _
  211.         ByVal nSize As Integer) As Integer
  212. #End If
  213.  
  214.  
  215. Private Sub Form_Load()
  216.     Dim myUser As String, myPass As String
  217.     Dim i As Integer
  218.     Dim winDir As String * 128
  219.     Dim dirLen As Integer
  220.     Dim dbName As String
  221.     
  222.     On Error GoTo LoadError
  223.     
  224.       ' Set the user and passwords for initial login.
  225.     myUser = "Admin"
  226.     myPass = "theboss"
  227.     
  228.     ' read VBDBHT.INI to get the name of the system database,
  229.     ' then assign that name to the SystemDB property
  230.     DBEngine.SystemDB = GetSystemDatabase()
  231.  
  232.     ' log in
  233.     DBEngine.DefaultUser = myUser
  234.     DBEngine.DefaultPassword = myPass
  235.     
  236.     ' Get the database name and open the database.
  237.     dbName = DataPath() & "\CHAPTER.09\ORDERS.MDB" ' DataPath() is in READINI.BAS
  238.     Set db = DBEngine.Workspaces(0).OpenDatabase(dbName)
  239.  
  240.     ' Fill the list boxes.
  241.     FillUserList
  242.     FillTableList
  243. Exit Sub
  244.  
  245. LoadError:
  246.     MsgBox Err.Description, vbCritical
  247. End
  248.  
  249. End Sub
  250.  
  251.  
  252. Sub FillUserList()
  253.     Dim usr As User
  254.     
  255.     For Each usr In DBEngine.Workspaces(0).Users
  256.         If UCase$(usr.Name) <> "CREATOR" And UCase$(usr.Name) <> "ENGINE" And UCase$(usr.Name) <> "ADMIN" Then
  257.             lstUsers.AddItem usr.Name
  258.         End If
  259.     Next
  260. End Sub
  261.  
  262. Sub FillTableList()
  263.     Dim doc As Document
  264.     
  265.     For Each doc In db.Containers("Tables").Documents
  266.         If Left$(doc.Name, 4) <> "MSys" Then lstTables.AddItem doc.Name
  267.     Next
  268.  
  269. End Sub
  270.  
  271. Private Sub lstUsers_Click()
  272.     Dim i As Integer
  273.     
  274.     If lstTables.ListIndex > -1 Then
  275.         If ReadPermissions() = False Then
  276.             lstUsers.ListIndex = -1
  277.             For i = 0 To 6
  278.                 chkPermission(i).Value = CHK_UNCHECKED
  279.                 chkPermission(i).Enabled = False
  280.             Next i
  281.         End If
  282.     End If
  283. End Sub
  284.  
  285. Private Sub lstTables_Click()
  286.     Dim i As Integer
  287.     
  288.     If lstUsers.ListIndex > -1 Then
  289.         If ReadPermissions() = False Then
  290.             lstTables.ListIndex = -1
  291.             For i = 0 To 6
  292.                 chkPermission(i).Value = CHK_UNCHECKED
  293.                 chkPermission(i).Enabled = False
  294.             Next i
  295.         End If
  296.     End If
  297. End Sub
  298.  
  299. Function ReadPermissions() As Boolean
  300.     Dim pass As String
  301.     Dim i As Integer
  302.     Dim permissionCode As Long
  303.     Dim doc As Document
  304.     
  305.     On Error GoTo ReadPermissionsError
  306.     
  307.     Set doc = db.Containers("Tables").Documents(lstTables.Text)
  308.     doc.UserName = lstUsers.Text
  309.     
  310.     For i = 0 To 6
  311.         chkPermission(i).Enabled = True
  312.         chkPermission(i).Value = CHK_UNCHECKED
  313.     Next i
  314.     lblPermissions.Caption = doc.Permissions
  315.     permissionCode = doc.Permissions
  316.     Select Case permissionCode
  317.         Case DBSEC_ADMINISTER
  318.             For i = 0 To 6
  319.                 chkPermission(i).Value = CHK_CHECKED
  320.             Next i
  321.         Case DBSEC_MODIFYDESIGN
  322.             chkPermission(P_MODIFYDESIGN).Value = CHK_CHECKED
  323.             chkPermission(P_READDESIGN).Value = CHK_CHECKED
  324.             chkPermission(P_READDATA).Value = CHK_CHECKED
  325.             chkPermission(P_UPDATEDATA).Value = CHK_CHECKED
  326.             chkPermission(P_DELETEDATA).Value = CHK_CHECKED
  327.         Case DBSEC_UPDATEDATA
  328.             chkPermission(P_UPDATEDATA).Value = CHK_CHECKED
  329.             chkPermission(P_READDESIGN).Value = CHK_CHECKED
  330.             chkPermission(P_READDATA).Value = CHK_CHECKED
  331.         Case DBSEC_DELETEDATA
  332.             chkPermission(P_DELETEDATA).Value = CHK_CHECKED
  333.             chkPermission(P_READDESIGN).Value = CHK_CHECKED
  334.             chkPermission(P_READDATA).Value = CHK_CHECKED
  335.         Case DBSEC_INSERTDATA
  336.             chkPermission(P_INSERTDATA).Value = CHK_CHECKED
  337.             chkPermission(P_READDESIGN).Value = CHK_CHECKED
  338.             chkPermission(P_READDATA).Value = CHK_CHECKED
  339.         Case DBSEC_READDATA
  340.             chkPermission(P_READDATA).Value = CHK_CHECKED
  341.             chkPermission(P_READDESIGN).Value = CHK_CHECKED
  342.         Case DBSEC_READDESIGN
  343.             chkPermission(P_READDESIGN).Value = CHK_CHECKED
  344.         Case DBSEC_MODIFYDESIGN_INSERTDATA
  345.             chkPermission(P_MODIFYDESIGN).Value = CHK_CHECKED
  346.             chkPermission(P_READDESIGN).Value = CHK_CHECKED
  347.             chkPermission(P_READDATA).Value = CHK_CHECKED
  348.             chkPermission(P_UPDATEDATA).Value = CHK_CHECKED
  349.             chkPermission(P_INSERTDATA).Value = CHK_CHECKED
  350.             chkPermission(P_DELETEDATA).Value = CHK_CHECKED
  351.         Case DBSEC_UPDATEINSERTDATA
  352.             chkPermission(P_UPDATEDATA).Value = CHK_CHECKED
  353.             chkPermission(P_INSERTDATA).Value = CHK_CHECKED
  354.             chkPermission(P_READDESIGN).Value = CHK_CHECKED
  355.             chkPermission(P_READDATA).Value = CHK_CHECKED
  356.         Case DBSEC_UPDATEDELETEDATA
  357.             chkPermission(P_UPDATEDATA).Value = CHK_CHECKED
  358.             chkPermission(P_READDESIGN).Value = CHK_CHECKED
  359.             chkPermission(P_READDATA).Value = CHK_CHECKED
  360.             chkPermission(P_DELETEDATA).Value = CHK_CHECKED
  361.         Case DBSEC_INSERTDELETEDATA
  362.             chkPermission(P_DELETEDATA).Value = CHK_CHECKED
  363.             chkPermission(P_READDESIGN).Value = CHK_CHECKED
  364.             chkPermission(P_READDATA).Value = CHK_CHECKED
  365.             chkPermission(P_INSERTDATA).Value = CHK_CHECKED
  366.         Case DBSEC_UPDATEINSERTDELETEDATA
  367.             chkPermission(P_UPDATEDATA).Value = CHK_CHECKED
  368.             chkPermission(P_READDESIGN).Value = CHK_CHECKED
  369.             chkPermission(P_READDATA).Value = CHK_CHECKED
  370.             chkPermission(P_DELETEDATA).Value = CHK_CHECKED
  371.             chkPermission(P_INSERTDATA).Value = CHK_CHECKED
  372.     End Select
  373.     ReadPermissions = True
  374.     
  375. Exit Function
  376. ReadPermissionsError:
  377.     MsgBox Err.Description & " (" & Err.Number & ")", vbExclamation
  378.     ReadPermissions = False
  379. Exit Function
  380.     
  381. End Function
  382.  
  383. Private Sub chkPermission_Click(Index As Integer)
  384.     Dim i As Integer
  385.     Select Case Index
  386.         Case P_ADMINISTER
  387.             If chkPermission(Index).Value = CHK_CHECKED Then
  388.                 For i = 0 To 6
  389.                     chkPermission(i).Value = CHK_CHECKED
  390.                 Next i
  391.             End If
  392.         Case P_READDESIGN
  393.             If chkPermission(Index).Value = CHK_UNCHECKED Then
  394.                 For i = 0 To 6
  395.                     chkPermission(i).Value = CHK_UNCHECKED
  396.                 Next i
  397.             End If
  398.         Case P_READDATA
  399.             If chkPermission(Index).Value = CHK_CHECKED Then
  400.                 chkPermission(P_READDESIGN).Value = CHK_CHECKED
  401.             Else
  402.                 chkPermission(P_MODIFYDESIGN).Value = CHK_UNCHECKED
  403.                 chkPermission(P_UPDATEDATA).Value = CHK_UNCHECKED
  404.                 chkPermission(P_DELETEDATA).Value = CHK_UNCHECKED
  405.                 chkPermission(P_INSERTDATA).Value = CHK_UNCHECKED
  406.                 chkPermission(P_ADMINISTER).Value = CHK_UNCHECKED
  407.             End If
  408.         Case P_MODIFYDESIGN
  409.             If chkPermission(Index).Value = CHK_CHECKED Then
  410.                 chkPermission(P_READDESIGN).Value = CHK_CHECKED
  411.                 chkPermission(P_READDATA).Value = CHK_CHECKED
  412.                 chkPermission(P_UPDATEDATA).Value = CHK_CHECKED
  413.                 chkPermission(P_INSERTDATA).Value = CHK_CHECKED
  414.             Else
  415.                 chkPermission(P_ADMINISTER).Value = CHK_UNCHECKED
  416.             End If
  417.         Case P_UPDATEDATA
  418.             If chkPermission(Index).Value = CHK_CHECKED Then
  419.                 chkPermission(P_READDESIGN).Value = CHK_CHECKED
  420.                 chkPermission(P_READDATA).Value = CHK_CHECKED
  421.             Else
  422.                 chkPermission(P_ADMINISTER).Value = CHK_UNCHECKED
  423.                 chkPermission(P_MODIFYDESIGN).Value = CHK_UNCHECKED
  424.             End If
  425.         Case P_DELETEDATA
  426.             If chkPermission(Index).Value = CHK_CHECKED Then
  427.                 chkPermission(P_READDESIGN).Value = CHK_CHECKED
  428.                 chkPermission(P_READDATA).Value = CHK_CHECKED
  429.             Else
  430.                 chkPermission(P_ADMINISTER).Value = CHK_UNCHECKED
  431.                 chkPermission(P_MODIFYDESIGN).Value = CHK_UNCHECKED
  432.             End If
  433.         Case P_INSERTDATA
  434.             If chkPermission(Index).Value = CHK_CHECKED Then
  435.                 chkPermission(P_READDESIGN).Value = CHK_CHECKED
  436.                 chkPermission(P_READDATA).Value = CHK_CHECKED
  437.             Else
  438.                 chkPermission(P_ADMINISTER).Value = CHK_UNCHECKED
  439.             End If
  440.     End Select
  441.         
  442.  
  443. End Sub
  444.  
  445.  
  446. Private Sub cmdSave_Click()
  447.     Dim doc As Document
  448.     Dim permissionCode As Long
  449.     
  450.     On Error GoTo SaveError
  451.     
  452.     Set doc = db.Containers("Tables").Documents(lstTables.Text)
  453.     doc.UserName = lstUsers.Text
  454.     If chkPermission(P_ADMINISTER) = CHK_CHECKED Then
  455.         permissionCode = DBSEC_ADMINISTER
  456.     ElseIf chkPermission(P_MODIFYDESIGN) = CHK_CHECKED Then
  457.         If chkPermission(P_INSERTDATA) = CHK_CHECKED Then
  458.             permissionCode = DBSEC_MODIFYDESIGN_INSERTDATA
  459.         Else
  460.             permissionCode = DBSEC_MODIFYDESIGN
  461.         End If
  462.     ElseIf chkPermission(P_UPDATEDATA) = CHK_CHECKED Then
  463.         If chkPermission(P_INSERTDATA) = CHK_CHECKED Then
  464.             If chkPermission(P_DELETEDATA) = CHK_CHECKED Then
  465.                 permissionCode = DBSEC_UPDATEINSERTDELETEDATA
  466.             Else
  467.                 permissionCode = DBSEC_UPDATEINSERTDATA
  468.             End If
  469.         Else
  470.             permissionCode = DBSEC_UPDATEDATA
  471.         End If
  472.     ElseIf chkPermission(P_INSERTDATA) = CHK_CHECKED Then
  473.         If chkPermission(P_DELETEDATA) = CHK_CHECKED Then
  474.             permissionCode = DBSEC_INSERTDELETEDATA
  475.         Else
  476.             permissionCode = DBSEC_INSERTDATA
  477.         End If
  478.     ElseIf chkPermission(P_DELETEDATA) = CHK_CHECKED Then
  479.         permissionCode = DBSEC_DELETEDATA
  480.     ElseIf chkPermission(P_READDATA) = CHK_CHECKED Then
  481.         permissionCode = DBSEC_READDATA
  482.     ElseIf chkPermission(P_READDESIGN) = CHK_CHECKED Then
  483.         permissionCode = DBSEC_READDESIGN
  484.     Else
  485.         permissionCode = DBSEC_NOPERMISSIONS
  486.     End If
  487.     If UCase$(doc.UserName) = "ADMIN" Then permissionCode = permissionCode + DBSEC_READSEC
  488.     doc.Permissions = permissionCode
  489.     lblPermissions.Caption = doc.Permissions
  490. Exit Sub
  491. SaveError:
  492.     MsgBox Err.Description & " (" & Err.Number & ")"
  493. Exit Sub
  494. End Sub
  495.  
  496. Private Sub cmdClose_Click()
  497.     End
  498. End Sub
  499.  
  500. Private Function GetSystemDatabase() As String
  501.     ' Returns the name of the system directory
  502.     
  503.     Const INI_FILENAME = "VBDBHT.INI"
  504.     Const MAX_PATH = 128
  505.  
  506.     Dim lpReturnedString As String * MAX_PATH
  507.     Dim bytesBack As Integer
  508.     
  509.     bytesBack = GetPrivateProfileString("Options", _
  510.         "SystemDB", "", lpReturnedString, MAX_PATH, INI_FILENAME)
  511.     GetSystemDatabase = IIf(bytesBack > 0, Left$(lpReturnedString, bytesBack), "")
  512.     
  513. End Function
  514.  
  515.